Next: Variable Scoping, Previous: Accessing Variables, Up: Variables [Contents][Index]
The usual way to change the value of a variable is with the
special form setq. When you need to compute the
choice of variable at run time, use the function
set.
This special form is the most common method of changing a variable’s value. Each symbol is given a new value, which is the result of evaluating the corresponding form. The current binding of the symbol is changed.
setq does not evaluate symbol; it
sets the symbol that you write. We say that this argument is
automatically quoted. The
‘q’ in setq stands for
“quoted”.
The value of the setq form is the value of
the last form.
(setq x (1+ 2))
⇒ 3
x ; x now has a global value.
⇒ 3
(let ((x 5))
(setq x 6) ; The local binding of x is set.
x)
⇒ 6
x ; The global value is unchanged.
⇒ 3
Note that the first form is evaluated, then the first symbol is set, then the second form is evaluated, then the second symbol is set, and so on:
(setq x 10 ; Notice thatxis set before y (1+ x)) ; the value ofyis computed. ⇒ 11
This function puts value in the value cell of symbol. Since it is a function rather than a special form, the expression written for symbol is evaluated to obtain the symbol to set. The return value is value.
When dynamic variable binding is in effect (the default),
set has the same effect as setq,
apart from the fact that set evaluates its
symbol argument whereas setq does
not. But when a variable is lexically bound, set
affects its dynamic value, whereas setq
affects its current (lexical) value. See Variable
Scoping.
(set one 1) error→ Symbol's value as variable is void: one
(set 'one 1)
⇒ 1
(set 'two 'one)
⇒ one
(set two 2) ; two evaluates to symbol one.
⇒ 2
one ; So it isonethat was set. ⇒ 2 (let ((one 1)) ; This binding ofoneis set, (set 'one 3) ; not the global value. one) ⇒ 3
one
⇒ 2
If symbol is not actually a symbol, a
wrong-type-argument error is signaled.
(set '(x y) 'z) error→ Wrong type argument: symbolp, (x y)
Next: Variable Scoping, Previous: Accessing Variables, Up: Variables [Contents][Index]